import { createRouter, createWebHashHistory } from "vue-router"

import Admin from '~/layout/admin.vue'
import Index from '~/pages/index.vue'
import Login from '~/pages/login.vue'
import NotFound from '~/pages/404.vue'
import GoodList from '~/pages/goods/list.vue'
import CartList from '~/pages/category/list.vue'
import UserList from '~/pages/user/list.vue'
import OrderList from '~/pages/order/list.vue'
import CommentList from '~/pages/comment/list.vue'
import ImageList from '~/pages/image/list.vue'
import NoticeList from '~/pages/notice/list.vue'
import SettingBase from '~/pages/setting/base.vue'
import CouponList from '~/pages/coupon/list.vue'
import ManagerList from '~/pages/manager/list.vue'


// 所有用户共享路由
const routes = [
    {
        path: "/",
        name: 'admin',
        component: Admin
    },
    {
        path: "/login",
        component: Login,
        meta: {
            title : '登录页'
        }
    },
    {
        path: "/:pathMatch(.*)*",
        component: NotFound,
        meta: {
            title : '404'
        }
    }
]

// 动态路由,根据后端返回的路由信息动态添加路由
const asyncRoutes = [
    {
        path: "/",
        name: '/',
        component: Index,
        meta: {
            title : '首页'
        }
    },
    {
        path: "/goods/list",
        name: "/goods/list",
        component: GoodList,
        meta: {
            title : '商品管理'
        }
    },
    {
        path: "/category/list",
        name: "/category/list",
        component: CartList,
        meta: {
            title : '分类列表'
        }
    },
    {
        path: "/user/list",
        name: "/user/list",
        component: UserList,
        meta: {
            title : '用户列表'
        }
    },
    {
        path: "/order/list",
        name: "/order/list",
        component: OrderList,
        meta: {
            title : '订单列表'
        }
    },
    {
        path: "/comment/list",
        name: "/comment/list",
        component: CommentList,
        meta: {
            title : '评价列表'
        }
    },
    {
        path: "/image/list",
        name: "/image/list",
        component: ImageList,
        meta: {
            title : '图库列表'
        }
    },
    {
        path: "/notice/list",
        name: "/notice/list",
        component: NoticeList,
        meta: {
            title : '公告列表'
        }
    },
    {
        path: "/setting/base",
        name: "/setting/base",
        component: SettingBase,
        meta: {
            title : '配置'
        }
    },
    {
        path: "/coupon/list",
        name: "/coupon/list",
        component: CouponList,
        meta: {
            title : '优惠券列表'
        }
    },
    {
        path: "/manager/list",
        name: "/manager/list",
        component: ManagerList,
        meta: {
            title : '管理员列表'
        }
    }
]

export const router = createRouter({
    history: createWebHashHistory(),
    routes
})

// 动态添加路由的方法
export function addRoutes(menus){
    // 是否有新的路由
    let hasNewRoutes = false
    // 递归查找添加路由
    const findAndAddRouteByMenus = (arr) => {
        arr.forEach(e =>{
            // 在前端对应的表看看是否有和后端匹配的
            let item = asyncRoutes.find(o => o.path == e.frontpath)
            // console.log(item)
            // 没有注册添加过直接注册添加路由
            if(item && !router.hasRoute(item.path)){
                router.addRoute('admin', item)
                hasNewRoutes = true
            }
            // 往child递归
            if(e.child && e.child.length > 0){
                findAndAddRouteByMenus(e.child)
            }
        })
    }
    // 调用函数
    findAndAddRouteByMenus(menus)
    // console.log(router.getRoutes())
    // 返回是否有新的路由
    return hasNewRoutes
}
